package com.bh.shipment.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.bh.shipment.domain.JcShipment;
import com.bh.shipment.vo.*;
import com.github.pagehelper.PageInfo;

import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 运单管理Service接口
 *
 * @author slx
 * @date 2023-04-22
 */
public interface IJcShipmentService extends IService<JcShipment> {
    /**
     * 查询运单管理
     *
     * @param id 运单管理主键
     * @return 运单管理
     */
    public JcShipment selectJcShipmentById(Long id);

    /**
     * 查询运单管理
     *
     * @param code 运单管理主键
     * @return 运单管理
     */
    public JcShipment selectJcShipmentByCode(String code);

    /**
     * 查询运单管理
     *
     * @param code 运单管理主键
     * @return 运单管理
     */
    public JcShipmentUnloadVo selectJcShipmentUnloadVoByCode(String code);

    /**
     * 查询运单管理列表
     *
     * @param jcShipment 运单管理
     * @return 运单管理集合
     */
    public List<JcShipmentSysApiVO> selectJcShipmentSysList(JcShipmentSysVo jcShipment);

    /**
     * 查询运单管理 分页 列表
     *
     * @param jcShipment 运单管理
     * @return 运单管理集合
     */
    public PageInfo<JcShipmentListVo> selectPageJcShipmentList(JcShipmentSysVo jcShipment);

    /**
     * 查询运单管理全部列表
     *
     * @param jcShipment 运单管理
     * @return 运单管理集合
     */
    public List<JcShipmentListVo> selectJcShipmentList(JcShipmentSysVo jcShipment);

    /**
     * 专门为别的机构查看到站车辆
     *
     * @param sysVo
     * @return 运单管理集合
     */
    public List<JcShipmentListVo> selectTrackShipmentList(JcShipmentSysVo sysVo);
    /**
     * 专门为别的机构查看到站车辆
     *
     * @param orgId
     * @return 运单管理集合
     */
    public List<JcShipmentListVo> getRVShipmentList(JcShipmentSysVo sysVo);

    /**
     * 获取 到站记录
     *
     * @param jcShipment 运单管理
     * @return 运单管理集合
     */
    public List<JcShipmentListVo> getDZShipmentInfo(JcShipmentSysVo jcShipment);

    /**
     * 获取 到站记录
     *
     * @param jcShipment 运单管理
     * @return 运单管理集合
     */
    public List<JcShipmentListVo> getDZShipmentList(JcShipmentSysVo jcShipment);

    /**
     * 查询运单管理列表
     *
     * @param jcShipment 运单管理
     * @return 运单管理集合
     */
    public List<JcShipmentSysApiVO> selectDriverJcShipmentList(JcShipmentSysVo jcShipment);

    /**
     * 新增运单管理
     *
     * @param jcShipment 运单管理
     * @return 结果
     */
    public int insertOrUpdateJcShipment(JcShipment jcShipment);

    /**
     * 新增运单管理
     *
     * @param jcShipment 运单管理
     * @return 结果
     */
    public int saveAbnormalShipment(JcShipmentAbnormalVO jcShipment);

    /**
     * 新增运单管理
     *
     * @param jcShipment 运单管理
     * @return 结果
     */
    public int arriveJcShipmentList(JcShipment jcShipment);



    public int updateRegTime(Long id, String source);

    public int updateArrivedTime(Long id, Date date);

    public int updateTransportFinished(JcShipmentFinishedVo addShipmentFinishedVo);



    public int unloadFinished(Long shipmentId);

    /**
     * 批量删除运单管理
     *
     * @param ids 需要删除的运单管理主键集合
     * @return 结果
     */
    public int deleteJcShipmentByIds(Long[] ids);

    /**
     * 删除运单管理信息
     *
     * @param id 运单管理主键
     * @return 结果
     */
    public int deleteJcShipmentById(Long id);

    /**
     * 删除运单管理信息
     *
     * @param code 运单管理主键
     * @return 结果
     */
    public int deleteJcShipmentByCode(String code);

    /**
     * 打印运单
     *
     * @param ids 需要打印的运单管理主键集合
     * @return 运单管理
     */
    public void printShipment(HttpServletResponse response, Long[] ids);

    /**
     * 打印运单
     *
     * @param ids 需要打印的运单管理主键集合
     * @return 运单管理
     */
    public void printSignPdf(HttpServletResponse response, Long[] ids);
    /**
     * 打印运单
     *
     * @param ids 需要打印的运单管理主键集合
     * @return 运单管理
     */
    public String printSignBase64Pdf(Long[] ids);
    /**
     * 打印运单
     *
     * @param ids 需要打印的运单管理主键集合
     * @return 运单管理
     */
    public Map<String, Object> printShipmentData(Long[] ids);
}
